/**
 * Desc: 封返回类
 * User: cuixiaonai
 * Email: 15965873315@163.com
 * Date: 2022/1/10 1:07 PM
 */
package _return

import (
	"encoding/json"
	"github.com/gin-gonic/gin"
	config2 "go_gin_mvc/src/config"
	"go_gin_mvc/src/pkg/rsa"
	"net/http"
)

// 对需要返回的信息进行封装，方便对数据进行进一步处理
type ReturnMsg struct {
	Code  int         `json:"code"`
	Msg   string      `json:"msg"`
	Encry string      `json:"encry"`
	Data  interface{} `json:"data"`
}

// 对需要返回的信息进行赋值，并以结构体返回
func RetunMsgFunc(code Code, data interface{}) *ReturnMsg {
	rm := new(ReturnMsg)
	rm.Code = code.Code
	rm.Msg = code.Msg
	rm.Encry = ""
	// 抛出数据是否加密
	config := config2.Config()
	if config.Datasetup.WhetherToEncrypt == 1 {
		// 返回数据需要加密
		DenseType := config.Datasetup.Type
		Key := config.Datasetup.Key
		Vi := config.Datasetup.Vi
		if DenseType == "R-C" {
			JsonData, _ := json.Marshal(data)
			orig := string(JsonData)
			EncryptDate := rsa.AesEncrypt(orig, Key, Vi)
			data = EncryptDate
			// 解密
			//AesDate := rsa.AesDecrypt(EncryptDate, Key, Vi)
			//logging.Info(AesDate)
		}
		rm.Encry = DenseType
	}
	rm.Data = data
	return rm
}

// 请求成功的时候 使用该方法返回信息
func Success(ctx *gin.Context, v interface{}) {
	ctx.JSON(http.StatusOK, RetunMsgFunc(SUCCESS, v))
}

// 请求失败的时候, 使用该方法返回信息
func Failed(ctx *gin.Context, code Code, v interface{}) {
	ctx.JSON(http.StatusOK, RetunMsgFunc(code, v))
}
